package br.com.infnet.projeto.bloco.ejb.impl;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import br.com.infnet.projeto.bloco.dao.ContaEletronicaDAO;
import br.com.infnet.projeto.bloco.dao.impl.ContaEletronicaDAOImpl;
import br.com.infnet.projeto.bloco.ejb.ContaEletronicaEJBLocal;
import br.com.infnet.projeto.bloco.exception.AplicacaoException;
import br.com.infnet.projeto.bloco.exception.ObjetoNaoEncontradoException;
import br.com.infnet.projeto.bloco.model.ContaEletronica;

@Singleton
public class ContaEletronicaEJBImpl implements ContaEletronicaEJBLocal {

	@PersistenceContext
	private EntityManager entityManager;

	private ContaEletronicaDAO dao;

	@PostConstruct
	public void init() {
		dao = new ContaEletronicaDAOImpl(entityManager);
	}

	public long incluir(ContaEletronica conta) throws AplicacaoException {
		try {
			dao.incluir(conta);
			return conta.getId();
		} catch (Exception e) {
			throw new AplicacaoException(e);
		}
	}

	public boolean excluir(ContaEletronica conta) throws AplicacaoException {

		try {
			ContaEletronica contaEletronica = dao.buscar(conta.getId());
			return dao.excluir(contaEletronica);
		} catch (ObjetoNaoEncontradoException e) {
			throw new AplicacaoException("Conta nao encontrada");
		}
	}

	public boolean alterar(ContaEletronica conta) throws AplicacaoException {
		return dao.alterar(conta);
	}

	public ContaEletronica buscarPorId(long id) throws AplicacaoException {
		try {
			ContaEletronica contaEletronica = dao.buscar(id);
			return contaEletronica;
		} catch (ObjetoNaoEncontradoException e) {
			throw new AplicacaoException("Conta nao encontrada");
		}
	}
	
	public ContaEletronica buscarPorNumero(Long numeroConta) throws AplicacaoException {
		try {
			ContaEletronica contaEletronica = dao.buscarPorNumero(numeroConta);
			return contaEletronica;
		} catch (ObjetoNaoEncontradoException e) {
			throw new AplicacaoException("Conta nao encontrada");
		}
	}

}
